home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 481a.lha / AMIGA C MANUAL_v2.00 / CMAN2.LZH / HintsAndTips / HintsAndTips.doc < prev    next >
Text File  |  1991-01-27  |  7KB  |  232 lines

  1. 14    HINTS AND TIPS
  2.  
  3. 14.1  INTRODUCTION
  4.  
  5. This chapter contains a mixture of useful hints and tips.
  6.  
  7.  
  8.  
  9. 14.2  NTSC VERSUS PAL
  10.  
  11. If you have an American Amiga you can open screens that are up
  12. to 200 lines high. (400 with interlace) This system is called
  13. NTSC. However, an European Amiga can open screens that are up
  14. to 256 lines high. (512 with interlace) This system is called
  15. PAL.
  16.  
  17.  
  18.  
  19. 14.2.1  HOW TO WRITE PROGRAMS THAT WILL FIT BOTH SYSTEMS
  20.  
  21. If you want to write programs that will fit both systems you
  22. must do one of the following things:
  23.  
  24. 1. Do not open screens that are taller than 200 lines. The
  25.    program can then be run on both systems. However, this is
  26.    not always the best solution since the PAL user will be
  27.    annoyed when he can not use the last 56 lines of the
  28.    display.
  29.  
  30. 2. Open the Graphics library and see what type of system your
  31.    program is running under. If you discover that it is running
  32.    on a NTSC system, use only the first 200 lines. If the
  33.    program is running on a PAL system you may use all 256 lines.
  34.  
  35.  
  36. If you decide that your program should only use screens up to
  37. 200 lines tall you should still check what system the program
  38. is running under. If you discover that it is an European Amiga
  39. you can position the display 28 (56/2) lines down, and the
  40. large unused are at the bottom of the PAL displays will
  41. visually disappear.
  42.  
  43.  
  44.  
  45. 14.2.2  NTSC OR PAL?
  46.  
  47. To check which system, NTSC or PAL, your program is running on
  48. you simply open the graphics library and check the DisplayFlags.
  49. Here is a short demonstration program:
  50.  
  51. /* Example 1                                               */
  52. /* This example tell you if you have an American (NTSC) or */
  53. /* European (PAL) system.                                  */ 
  54.  
  55.  
  56. /* Declares commonly used data types, such as UWORD etc: */
  57. #include <exec/types.h>
  58.  
  59. /* This header file declares the GfxBase structure: */
  60. #include <graphics/gfxbase.h>
  61.  
  62.  
  63. /* Pointer to the GfxBase structure. NOTE! This pointer must */
  64. /* always be called "GfxBase"!                               */
  65. struct GfxBase *GfxBase;
  66.  
  67.  
  68. main()
  69. {
  70.   /* Open the Graphics Library: (any version) */
  71.   GfxBase = (struct GfxBase *)
  72.     OpenLibrary( "graphics.library", 0 );
  73.  
  74.   if( !GfxBase )
  75.     exit(); /* ERROR! Could not open the Graphics Library! */
  76.  
  77.  
  78.   if( GfxBase->DisplayFlags & NTSC )
  79.     printf( "You have an American (NTSC) Amiga.\n" );
  80.  
  81.   if( GfxBase->DisplayFlags & PAL )
  82.     printf( "You have an European (PAL) Amiga.\n" );
  83.  
  84.  
  85.   /* Close the Graphics Library: */
  86.   CloseLibrary( GfxBase );
  87. }
  88.  
  89.  
  90.  
  91. 14.3  PROGRAMS RUNNING UNDER WORKBENCH
  92.  
  93. A program can either be run from the CLI or Workbench. If a
  94. program is run from workbench a special "console" window is
  95. automatically opened. All text will then be outputted in that
  96. window. If the program was run from CLI no special "console"
  97. window is opened since the text can be printed in the CLI
  98. window.
  99.  
  100. The special window is, as said above, automatically opened
  101. when the program is run from workbench. However, sometimes
  102. you do not want this window. If you will not print anything
  103. the window is unnecessary, and somehow annoying.
  104.  
  105. To get rid of the window you simply call your main() function
  106. _main(). (Note the special symbol "_".) The program will then
  107. not open the console window if run from workbench, but the
  108. disadvantage is of course that you can not print any text
  109. with the printf() function etc. If you would try to print text
  110. without having any window to print it in, the system will
  111. crash. (Not to be recommended.)
  112.  
  113. Here are two examples. The first one is a normal C program that
  114. simply prints "Hello!". If the program is run from the CLI, the
  115. text will be printed in the CLI window. If the program is run
  116. from workbench, a console window will be opened and the text
  117. printed in it. The second example will not open any console
  118. window if run from workbench, but it can then of course not
  119. print anything.
  120.  
  121. /* Example 2                                                  */
  122. /* This program will print "Hello!" in the CLI window if      */
  123. /* started from CLI, or the text will be printed in a special */
  124. /* window that is automatically opened if run from workbench. */
  125.  
  126. void main();
  127.  
  128. void main()
  129. {
  130.   int loop; 
  131.  
  132.   printf( "Hello!\n" );
  133.  
  134.   /* Wait for a while: */
  135.   for( loop = 0; loop < 500000; loop++ )
  136.     ;
  137. }
  138.  
  139.  
  140. /* Example 3 */
  141. /* This program will not open any console window if run from */
  142. /* workbench. The disadvantage is of course that you can not */
  143. /* use any "console functions" such as printf().             */
  144.  
  145. void _main();
  146.  
  147. void _main() /* Note the special character in front of main()! */
  148. {
  149.   int loop;
  150.  
  151.   /* Wait for a while: */
  152.   for( loop = 0; loop < 500000; loop++ )
  153.     ;
  154. }
  155.  
  156.  
  157. The reason why no console window is opened in Example 3 is
  158. because we have called our main() function _main(). The first
  159. function that is processed by C is actually not the main()
  160. function, it is the _main() function which then calls main().
  161. The _main() function is like a preprocessor that initializes
  162. the argc and argv variables. It also checks if the program is
  163. running under workbench, and will then open a console window.
  164.  
  165. The _main() function can be found on the fourth Lattice C disk,
  166. in the source directory called "umain.c".
  167.  
  168. If you call your own main() function _main(), the prewritten
  169. _main() function will not be used. No window will be opened,
  170. but no text can be printed, and you have to preprocess the
  171. argc and argv variables yourself.
  172.  
  173.  
  174.  
  175. 14.4  CHECK IF THE PROGRAM WAS STARTED FROM CLI OR WORKBENCH
  176.  
  177. It sometimes happen that you would like to know if the program
  178. was run from Workbench or a CLI window. It is actually very
  179. simple to check. The "argc" value will always be equal to one
  180. ore more if the program was run from a CLI window, while it
  181. will be equal to zero if the program was run from Workbench.
  182.  
  183. Here is a short program that tells you if it was run from a
  184. CLI window or from Workbench.
  185.  
  186. /* Example 4                                              */
  187. /* This program tells you if it was run from workbench or */
  188. /* from a CLI window.                                     */
  189.  
  190. void main();
  191.  
  192. void main( argc, argv )
  193. int argc;
  194. char *argv[];
  195. {
  196.   int loop;
  197.  
  198.  
  199.   if( argc )
  200.     printf( "The program was run from a CLI window!\n" );
  201.   else
  202.     printf( "The program was run from Workbench!\n" );
  203.  
  204.  
  205.   /* Wait for a while: */
  206.   for( loop = 0; loop < 500000; loop++ )
  207.     ;
  208. }
  209.  
  210.  
  211.  
  212. 14.5  EXAMPLES
  213.  
  214. Example1
  215.   This example tell you if you have an American (NTSC) or
  216.   European (PAL) system.
  217.  
  218. Example2
  219.   This program will print "Hello!" in the CLI window if
  220.   started from CLI, or the text will be printed in a special
  221.   window that is automatically opened if run from workbench.
  222.  
  223. Example3
  224.   This program will not open any console window if run from
  225.   workbench. The disadvantage is of course that you can not
  226.   use any "console functions" such as printf().
  227.  
  228. Example4
  229.   This program tells you if it was run from workbench or
  230.   from a CLI window.
  231.  
  232.